package API.DateDome.CalendarDome;

import java.util.Calendar;
import java.util.Date;

/**
 * ClassName:CalendarText001
 * Package:API.DateDome.CalendarDome
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/2/2-11:26
 * @Version:v1.0
 */
public class CalendarText001 {
    /*
     * 需求：将2023年09月10日 增加一个月
     * 1.定义字符串表示：2023年09月10日
     * 2.解析字符串得到Date对象
     * 3.获取2023年9月10日的毫秒值
     * 4.增加一个月的毫秒值：1000*60*60*24*30
     * 5.再把格式化时间变成：2023年10月10日
     *
     * Calendar代表了系统当前时间的日历对象,单独修改,获取时间中的年,月,日
     * 细节：Calendar是一个抽象类,不能直接创建对象
     *
     * 获取Calendar日历类对象的方法
     *
     * public static Calendar getInstance()  获取当前时间的日历对象*/

    public static void main(String[] args) {
        //获取日历对象
        //注:1：Calendar 是一个抽象类,不能直接new ,而是通过一个静态方法获取子类对象
        //底层原理：会根据系统的不同时区来获取不同的日历对象
        //会把时间中的 纪元，年，月，日，时，分，秒，星期，等等的都放到一个数组中

        //注意2：月份：范围0~11  如果获取出来的是0,那么实际上是1月
        //星期：在老外眼里,星期日是一周中的第一天
        //  1(星期日) 2(星期一) 3(星期二) 4(星期三) 5(星期四) 6(星期五) 7(星期六)
        Calendar c = Calendar.getInstance();//表示日历对象
        System.out.println(c);

        //修改日历代表的时间
        Date date = new Date(0L);
        c.setTime(date);
        System.out.println(c);

        //public int get(int field) 获取日期中的某个字段信息
        /*
         * 0：纪元
         * 1：年
         * 2：月
         * 3：一年中的第几周
         * 4：一个月中的第几周
         * 5：一个月中的第几天(日期)
         *
         * Java 在Calender类中,把索引对应的数字都定义成常量*/
        int year = c.get(1);
        int month = c.get(2)+1;
        int date1 = c.get(5);
        int week = c.get(7);
        System.out.println(year+" "+month+" "+date1+" "+getWeek(week));

        //public void set(int field,int value)  修改日历的某个字段信息
        c.set(Calendar.YEAR,2000);
        c.set(Calendar.MONTH,11);

        //调用方法在这个基础上增加一个月
        c.add(Calendar.MONTH,+1);
    }
    //传入对应数字：1-7
    //返回对应星期
    public static String getWeek(int index){
        //定义数组,让汉字星期几和1~7产生对应关系
        String[]arr={"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
        //根据索引发返回对应的星期
        return  arr[index];
    }
}
